#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<stack>
#include<vector>
#include<deque>
#include <iostream>
#include <deque>
//stack<int>stk;
using namespace std;
//int n;
//int i;
//nums[n] = -1;
//int main()
//{
//	for (i = 0; i < n; i++)
//	{
//		while (!stk.empty() && nums[i] < nums[stk.top()])
//		{
//			res[stk.top()] = i;
//			stk.pop();
//		}
//		stk.push(i);
//	}
//	return 0;
//}
//int main()
//{
//	int n = 0;
//	cin >> n;
//	vector<int>nums(n);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> nums[i];
//	}
//	vector<int>res(n, -1);
//	stack<int>stk;
//	for (int i = 0; i < n; i++)
//	{
//		while (!stk.empty() && nums[i] < nums[stk.top()])
//		{
//			res[stk.top()] = i;
//			stk.pop();
//		}
//		stk.push(i);
//	}
//	for (int i = 0; i < n; i++)
//	{
//		cout << res[i] << " ";
//	}
//	cout << endl;
//	return 0;
//}
//int main() 
//{
//    std::deque<int> que;
//    int arr[10] = { 1,2,4,6,7,9,8,24,56,78 };
//    int windowSize = 3;
//    for (int i = 0; i < 10; i++) 
//    {
//        if (i >= windowSize && que.front() == arr[i - windowSize])
//        {
//            que.pop_front();
//        }
//        if (!que.empty() && que.back() > arr[i])
//        {
//            que.pop_back();
//        }
//        que.push_back(arr[i]);
//        if (i >= windowSize - 1)
//        {
//            cout << que.front() << " ";
//        }
//    }
//    std::cout << std::endl;
//    return 0;
//}

//int main()
//{
//	int n = 0;
//	cin >> n;
//	vector<int>arr(n);
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		cin >> arr[i];
//	}
//	vector<int>res(n,0);
//	stack<int>stk;
//	for (i = 0; i < n; i++)
//	{
//		while (!stk.empty()&&arr[i] > arr[stk.top()])
//		{
//			res[stk.top()] = i + 1;
//			stk.pop();
//		}
//		stk.push(i);
//	}
//	for (i = 0; i < n; i++)
//	{
//		cout << res[i] << " ";
//	}
//	return 0;
//}
//for (i = 0; i < n; i++)
//{
//	if (i >= k && arr[i - k] == que.front())
//	{
//		que.pop_front();
//	}
//	if (!que.empty() && arr[i] < que.back())
//	{
//		que.pop_back();
//	}
//	que.push_back(arr[i]);
//	if (i >= k - 1)
//	{
//		cout << que.front() << " ";
//	}
//}
//cout << endl;
//for (i = 0; i < n; i++)
//{
//	if (i >= k && arr[i - k] == que.front())
//	{
//		que.pop_front();
//	}
//	if (!que.empty() && arr[i] < que.back())
//	{
//		que.pop_back();
//	}
//	que.push_back(arr[i]);
//	if (i >= k - 1)
//	{
//		cout << que.front() << " ";
//	}
//}
#include<iostream>
#include<stack>
#include<vector>
#include<deque>
#include <iostream>
#include <deque>
//stack<int>stk;
using namespace std;

deque<int>que;
int main()
{
	int n = 0;
	int k = 0;
	cin >> n >> k;
	vector<int>arr(n,0);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	deque<int>minQue, maxQue;
	vector<int>minRes, maxRes;
	for (i = 0; i < n; i++)
	{
		while (!minQue.empty() && arr[i] <= arr[minQue.back()])
		{
			minQue.pop_back();
		}
		minQue.push_back(i);
		if (i >= k && minQue.front() == i - k)
		{
			minQue.pop_front();
		}
		while(!maxQue.empty() && arr[i] >= arr[maxQue.back()])
		{
			maxQue.pop_back();
		}
		maxQue.push_back(i);
		if (i >= k && maxQue.front() == i - k)
		{
			maxQue.pop_front();
		}
		if (i >= k - 1)
		{
			minRes.push_back(arr[minQue.front()]);
			maxRes.push_back(arr[maxQue.front()]);
		}
	}
	for (int val : minRes)
	{
		cout << val << " ";
	}
	cout << endl;
	for (int val : maxRes)
	{
		cout << val << " ";
	}
}